package com.xiaoxi.exam.bean.enums;


import cn.xinzhili.xutils.core.ErrorCode;
import com.xiaoxi.exam.bean.errorcode.WxPayError;
import java.util.Objects;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

@AllArgsConstructor
@Getter
@Slf4j
public enum WxPayErrorCode {

  NOAUTH("NOAUTH", WxPayError.builder().err_code_des("商户无此接口权限").err_cause("商户未开通此接口权限")
      .err_resolve("请商户前往申请此接口权限").build()),

  NOTENOUGH("NOTENOUGH", WxPayError.builder().err_code_des("余额不足").err_cause("用户帐号余额不足")
      .err_resolve("用户帐号余额不足，请用户充值或更换支付卡后再支付").build()),

  ORDERPAID("ORDERPAID", WxPayError.builder().err_code_des("商户订单已支付").err_cause("商户订单已支付，无需重复操作")
      .err_resolve("商户订单已支付，无需更多操作").build()),

  ORDERCLOSED("ORDERCLOSED", WxPayError.builder().err_code_des("订单已关闭").err_cause("当前订单已关闭，无法支付")
      .err_resolve("当前订单已关闭，请重新下单").build()),

  SYSTEMERROR("SYSTEMERROR",
      WxPayError.builder().err_code_des("系统错误").err_cause("系统超时").err_resolve("系统异常，请用相同参数重新调用")
          .build()),

  APPID_NOT_EXIST("APPID_NOT_EXIST",
      WxPayError.builder().err_code_des("APPID不存在").err_cause("参数中缺少APPID")
          .err_resolve("请检查APPID是否正确").build()),

  MCHID_NOT_EXIST("MCHID_NOT_EXIST",
      WxPayError.builder().err_code_des("MCHID不存在").err_cause("参数中缺少MCHID")
          .err_resolve("请检查MCHID是否正确").build()),

  APPID_MCHID_NOT_MATCH("APPID_MCHID_NOT_MATCH",
      WxPayError.builder().err_code_des("appid和mch_id不匹配").err_cause("appid和mch_id不匹配")
          .err_resolve("请确认appid和mch_id是否匹配").build()),

  LACK_PARAMS("LACK_PARAMS",
      WxPayError.builder().err_code_des("缺少参数").err_cause("缺少必要的请求参数").err_resolve("请检查参数是否齐全")
          .build()),

  OUT_TRADE_NO_USED("OUT_TRADE_NO_USED",
      WxPayError.builder().err_code_des("商户订单号重复 ").err_cause("同一笔交易不能多次提交")
          .err_resolve("请核实商户订单号是否重复提交").build()),

  SIGNERROR("SIGNERROR",
      WxPayError.builder().err_code_des("签名错误").err_cause("参数签名结果不正确").err_resolve("请核实商户订单号是否重复提交")
          .build()),

  XML_FORMAT_ERROR("XML_FORMAT_ERROR",
      WxPayError.builder().err_code_des("XML格式错误").err_cause("XML格式错误")
          .err_resolve("请检查XML参数格式是否正确").build()),

  REQUIRE_POST_METHOD("REQUIRE_POST_METHOD",
      WxPayError.builder().err_code_des("请使用post方法").err_cause("未使用post传递参数")
          .err_resolve("请检查请求参数是否通过post方法提交").build()),

  POST_DATA_EMPTY("POST_DATA_EMPTY",
      WxPayError.builder().err_code_des("post数据为空").err_cause("post数据不能为空")
          .err_resolve("请检查post数据是否为空").build()),

  NOT_UTF8("NOT_UTF8", WxPayError.builder().err_code_des("编码格式错误").err_cause("未使用指定编码格式")
      .err_resolve("请使用NOT_UTF8编码格式").build()),

  ORDERNOTEXIST("ORDERNOTEXIST",
      WxPayError.builder().err_code_des("此交易订单号不存在").err_cause("查询系统中不存在此交易订单号")
          .err_resolve("该API只能查提交支付交易返回成功的订单，请商户检查需要查询的订单号是否正确").build());

  private String code;
  private WxPayError error;

  public static String getErrorMsg(String code) {

    WxPayErrorCode wxPayErrorCode = null;
    try {
      wxPayErrorCode = WxPayErrorCode.valueOf(code);
    } catch (Exception e) {
      log.error("微信支付,无效的错误码 {} ,{}", code, e);
    }

    if (Objects.isNull(wxPayErrorCode)) {
      return ErrorCode.REQUEST_FAILED.getDescription();
    }
    WxPayError error = wxPayErrorCode.getError();
    return error.getErr_cause() + ":" + error.getErr_resolve();
  }
}
